#include "common.h"

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        fprintf(stderr, "用法: %s <消费者ID（1/2）>\n", argv[0]);
        return 1;
    }
    int consumer_id = atoi(argv[1]);

    key_t shm_key = ftok(KEY_PATH, SHM_KEY);
    key_t sem_key = ftok(KEY_PATH, SEM_KEY);

    // 获取共享内存和信号量
    int shm_id = shmget(shm_key, sizeof(SharedMemory), 0666);
    SharedMemory *shm = (SharedMemory *)shmat(shm_id, NULL, 0);
    int sem_id = semget(sem_key, 3, 0666);

    while (1)
    {
        // 等待缓冲区有数据（full-1）
        sem_op(sem_id, 1, -1);
        // 互斥访问共享内存（确保同一时间只有一个消费者）
        sem_op(sem_id, 2, -1);

        char data[SHM_SIZE];
        strcpy(data, shm->data);

        // 释放互斥锁，通知生产者缓冲区空（empty+1）
        sem_op(sem_id, 2, +1);
        sem_op(sem_id, 0, +1);

        printf("消费者%d 消费: %s\n", consumer_id, data);
        if (strcmp(data, "quit") == 0)
            break;
    }

    shmdt(shm);
    return 0;
}